<?php namespace system\model;
use houdunwang\model\Model;
class Category extends Model{
	//数据表
	protected $table = "category";

	//允许填充字段
	protected $allowFill = ['*'];

	//禁止填充字段
	protected $denyFill = [ ];

	//自动验证
	protected $validate=[
		//['字段名','验证方法','提示信息',验证条件,验证时间]
          ['cate_name','required','栏目名称不能为空',  self::MUST_VALIDATE,self::MODEL_BOTH],
          ['cate_sort','required','栏目排序不能为空',  self::MUST_VALIDATE,self::MODEL_BOTH],
          ['cate_linkurl','required','外部链接不能为空',  self::MUST_VALIDATE,self::MODEL_BOTH],
        ['cate_description','required','栏目描述不能为空',  self::MUST_VALIDATE,self::MODEL_BOTH]
	];

	//自动完成
	protected $auto=[
		//['字段名','处理方法','方法类型',验证条件,验证时机]
        ['cate_sort','intval','function',self::MUST_AUTO,self::MODEL_BOTH ],
	];

	//自动过滤
    protected $filter=[
        //[表单字段名,过滤条件,处理时间]
    ];

	//时间操作,需要表中存在created_at,updated_at字段
	protected $timestamps=true;

    public  function  getAllCate(){
//        return $this->get()->toArray();
//        获取树形 数组增强 树状结构
        $data = $this->get() ? $this->get()->toArray() : [];
        return Arr::tree( $data , 'cate_name' , $fieldPri = 'cate_id' , $fieldPid = 'cate_pid' );
//        return Arr::tree($this->get()->toArray(), 'cate_name', $fieldPri = 'cate_id', $fieldPid = 'cate_pid');
    }
// 剔除自己和自己子集
    public function getSonCateData($cate_id)
    {
        //1.递归找子集，
        $cids = $this->getSon($this->get()->toArray(),$cate_id);
        //p($cids);
        //2.把自己追加进去
        $cids[] = $cate_id;
        //p($cids);
        //3.把自己和子集数据踢出去
        $res = $this->whereNotIn('cate_id',$cids)->get()->toArray();
        //p($res);
        return Arr::tree($res,'cate_name','cate_id','cate_pid');
    }

    /**
     * 递归找子集
     * @param $data				栏目所有数据
     * @param $cate_id			我们找$cate_id所有子集，栏目id
     */
    public function getSon($data,$cate_id)
    {
        //使用静态变量，不然每次调用自己的时候，$temp都是从空开始
        static $temp = [];
        foreach ($data as $k=>$v)
        {
            if($v['cate_pid']==$cate_id){
                //echo 1;
                //说明这条数据是我的儿子
                $temp[] = $v['cate_id'];//把找到的这条数据对应的cid存起来
                $this->getSon($data,$v['cate_id']);//接下来应该继续去找$v['cate_id'],它的子集数据
            }
        }
        return $temp;
    }
    /**
     * 删除
     */
    public function del ( $cate_id )
    {
        $model = Category::find( $cate_id );
        //增加判断，如果有子集不允许删除
        //var_dump($this->where('cate_pid',$cate_id)->get());die;
        if ( $this->where('cate_pid',$cate_id)->get()) {
            //将错误消息存到模型中
            $this->setError( ['请先删除子栏目'] );

            return false;
        }
        //删除当前的数据对象
        return $model->destory();
    }





}